package cz.muni.fi.pb138.mathml_canonicalizator;

import java.util.List;
import java.util.Map;

/**
 *
 * @author ndru
 */
public interface Node {

    /**
     * Adds a node as a child of a node it is called on.
     * 
     * @param Node to be added as child.
     */
    void addChild(Node child);

    /**
     * Returns children of the node it is called on.
     * 
     * @return List of nodes that are currently set as children of this node.
     */
    List<Node> getChildren();

    /**
     * Returns the tag name of the node it is called on. The tag name is a string.
     * 
     * @return Tag name of given node.
     */
    String getTagName();

    /**
     * Gets the text content of the node it is called on. The text content is a string.
     * 
     * @return Text content of given node.
     */
    String getTextContent();

    /**
     * Sets the text content of given node.
     * 
     * @param textContent The new text content of the given node.
     */
    void setTextContent(String textContent);

    /**
     * Gets the map of attributes.
     * 
     * @return Map of attributes of the given node. Key is always the name
     * of the attribute, while its value is the attributes value.
     */
    Map<String, String> getAttributes();
    
    /**
     * Returns the nodes shadow property value.
     * 
     * @return Boolean value, that is true if the nodes shadow property is
     * set as true.
     */
    boolean isShadow();
    
    /**
     * Sets the attribute shadow property.
     * 
     * @param shadow The new value of the given attributes shadow property.
     */
    void setShadow(boolean shadow);
}
